package com.platform.example.entity;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.google.common.collect.Lists;

/**
 * 
  * 公司 	
  * @author 王求卿[wangqiuqing] Tel:18101037995
  * @createDate 2017年9月5日 上午9:06:12
 */
@Entity
@Table(name = "t_company")
public class Company  implements java.io.Serializable {
	
	 /**
	  * serialVersionUID:TODO（用一句话描述这个变量[bian liang]表示什么）
	  *
	  * @since Ver 1.1
	  */
	 
	private static final long serialVersionUID = 1L;

	private String id;
	
	private String name;
	
	private String addr;
	
	private String telephone;
	
	
	private List<Person> personContents = Lists.newArrayList();
	
	public Company() {
		super();
	}
	 
	public Company(String id, String name, String addr, String telephone) {
		super();
		this.id = id;
		this.name = name;
		this.addr = addr;
		this.telephone = telephone;
	}
	
	 public void addPerson(Person person) {
	        if (!this.personContents.contains(person)) {
	            this.personContents.add(person);
	            person.setCompany(this);
	        }
	 }
	 
    public void removePerson(Person person) {
        if (this.personContents.contains(person)) {
        	person.setCompany(null);
            this.personContents.remove(person);
        }
    }

	@Id
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}

	public String getTelephone() {
		return telephone;
	}

	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
/**
 *  cascade属性的可能值有     
	all: 所有情况下均进行关联操作，即save-update和delete。     
	none: 所有情况下均不进行关联操作。这是默认值。      
	save-update: 在执行save/update/saveOrUpdate时进行关联操作。      
	delete: 在执行delete 时进行关联操作。      
	all-delete-orphan: 当一个节点在对象图中成为孤儿节点时，删除该节点。
	比如在一个一对多的关系中，Student包含多个book，当在对象关系中删除一个book时，
	此book即成为孤儿节点。
  * 	
  * 
  * mappedBy="company": 指明company类为双向关系维护端，负责外键的更新
  * @author 王求卿[wangqiuqing] Email:455654995@qq.com Tel:18101037995
  * @return
  * @createDate 2017年9月5日 上午10:24:01
  * @update:[日期YYYY-MM-DD][更改人姓名][变更描述]
 */
	@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy = "company")  
	public List<Person> getPersonContents() {
		return personContents;
	}

	public void setPersonContents(List<Person> personContents) {
		this.personContents = personContents;
	}
	 
}
